#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=2e5+10;
ll c[N];
int st[N];
int h[N],e[N],ne[N],idx;
void add(int a,int b)
{
	e[idx]=b;
	ne[idx]=h[a];
	h[a]=idx++;
}
void dfs(int u)
{
	ll sum=0;
	for(int i=h[u];~i;i=ne[i])
	{
		int j=e[i];
		if(!st[j]) dfs(j);
		sum+=c[j];
	}
	st[u]=1;
	c[u]=min(c[u],sum);
}
int main()
{
	IOS;
	int t;
	cin>>t;
	while(t--)
	{
		idx=0;
		int n,k;
		cin>>n>>k;
		for(int i=1;i<=n;i++)
		{
			st[i]=0;
			h[i]=-1;
			cin>>c[i];
		}
		for(int i=1;i<=k;i++)
		{
			int num=0;
			cin>>num;
			st[num]=1;
			c[num]=0;
		}
		for(int i=1;i<=n;i++)
		{
			int num=0;
			cin>>num;
			if(num==0) st[i]=1;
			for(int j=1;j<=num;j++)
			{
				int b;
				cin>>b;
				add(i,b);
			}
		}
		for(int i=1;i<=n;i++)
		{
			if(st[i]==0) dfs(i);
		 } 
		for(int i=1;i<=n;i++) cout<<c[i]<<' ';
		cout<<endl;
	}

	return 0;
}

